Java 22 的到来

2024 年 3 月 19 日 | 11分钟读完
萨拉特·钱德
Java SE 产品管理总监

Java 22 到来!

在 X 上关注JavaOpenJDK

JDK 22 现已推出!

Oracle 很自豪地宣布 JDK 22 面向开发人员、企业和最终用户全面推出。

Java 22 的新功能

JDK 22 提供了12 项增强功能,这些增强功能足以保证其自己的JDK 增强提案 (JEP) ,其中包括 7 项预览功能和 1 项孵化器功能。它们涵盖了对 Java 语言、API、性能以及 JDK 中包含的工具的改进。

1) 语言改进:

未命名变量和模式- JEP 456

当需要但未使用变量声明或嵌套模式时,提高了可读性。两者都用下划线字符表示

价值:

  • 捕获开发人员的意图,即未使用给定的绑定或 lambda 参数,并强制执行该属性以澄清程序并减少出错的机会。
  • 通过识别必须声明(例如,在 catch 子句中)但未使用的变量,提高所有代码的可维护性。
  • 允许多个模式出现在单个 case 标签中,如果它们都没有声明任何模式变量。
  • 通过消除不必要的嵌套类型模式来提高记录模式的可读性。

1.1) 语言预览

super (...) 之前的语句 [预览] - JEP 447:

在构造函数中,允许不引用正在创建的实例的语句出现在显式构造函数调用之前。

价值:

  • 为开发人员提供了更大的自由来表达构造函数的行为,从而可以更自然地放置目前必须纳入辅助静态方法、辅助中间构造函数或构造函数参数中的逻辑。
  • 保留构造函数在类实例化期间按自上而下顺序运行的现有保证,确保子类构造函数中的代码不会干扰超类实例化。
  • 不需要对 Java 虚拟机进行任何更改。此 Java 语言功能仅依赖于 JVM 验证和执行构造函数中显式构造函数调用之前出现的代码的当前能力。

字符串模板(第二次预览)- JEP 459:

字符串模板通过将文字文本与嵌入式表达式和模板处理器耦合来生成专门的结果,从而补充了 Java 现有的字符串文字和文本块。

价值:

  • 通过轻松表达包含运行时计算值的字符串,简化了 Java 程序的编写。
  • 增强混合文本和表达式的表达式的可读性,无论文本适合单个源行(如字符串文字)还是跨越多个源行(如文本块)。
  • 通过支持模板及其嵌入表达式的值的验证和转换,提高 Java 程序的安全性,这些程序从用户提供的值组成字符串并将它们传递到其他系统(例如,构建数据库查询)。
  • 通过允许 Java 库定义字符串模板中使用的格式化语法来保留灵活性。
  • 简化了接受非 Java 语言(例如 SQL、XML 和 JSON)编写的字符串的 API 的使用。
  • 允许创建根据文字文本和嵌入表达式计算的非字符串值,而无需通过中间字符串表示形式进行传输。

隐式声明的类和实例主要方法(第二预览版)- JEP 463:

学生可以编写他们的第一个 Java 程序,而无需了解为大型程序设计的语言功能。学生无需使用单独的语言方言,而是可以为单类程序编写简化的声明,然后随着技能的增长无缝扩展他们的程序以使用更高级的功能。

价值:

加速 Java 学习 -

  • 为 Java 编程提供了一个平滑的入门通道,以便教师可以循序渐进地介绍概念。
  • 帮助学生以简洁的方式编写基本程序,并随着他们的技能增长而优雅地扩展他们的代码。
  • 减少编写简单程序(例如脚本和命令行实用程序)的仪式。
  • 不介绍单独的 Java 语言初学者方言。
  • 不引入单独的初学者工具链;学生程序应该使用与编译和运行任何 Java 程序相同的工具来编译和运行。

2)图书馆

外部函数和内存 API - JEP 454:

允许 Java 程序与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即 JVM 外部的代码),并通过安全地访问外部内存(即不由 JVM 管理的内存),API 使 Java 程序能够调用本机库并处理本机数据,而不会造成脆弱性和危险。 JNI。

价值:

  • 生产力——用简洁、可读和纯 Java API取代脆弱的方法机制nativeJava 本机接口(JNI)。
  • 性能——提供对外部函数和内存的访问,其开销与 JNI 和sun.misc.Unsafe.
  • 广泛的平台支持— 允许在 JVM 运行的每个平台上发现和调用本机库。
  • 一致性——提供在多种内存(例如,本机内存、持久内存和托管堆内存)中操作无限大小的结构化和非结构化数据的方法。
  • 健全性——保证没有释放后使用错误,即使在多个线程之间分配和释放内存时也是如此。
  • 完整性- 允许程序使用本机代码和数据执行不安全的操作,但默认警告用户此类操作。

2.1) 库预览和孵化器

类文件 API(预览版)- JEP 457:

提供用于解析、生成和转换 Java 类文件的标准 API。

价值:

  • 该API允许依赖它的框架和程序自动支持最新JDK中的最新类文件,以便可以快速、轻松地采用以类文件表示的新语言和VM功能。

流收集器(预览)- JEP 461:

增强了Stream API以支持自定义中间操作。这将允许流管道以现有内置中间操作不易实现的方式转换数据。

价值:

  • 通过使流中的常见自定义操作更加灵活和富有表现力,提高开发人员的工作效率和代码可读性。尽可能允许中间操作操作无限大小的流。

结构化并发(第二预览版)- JEP 462:

简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消、提高可靠性并增强可观察性。

价值:

  • 通过推广一种编程风格来简化并发代码的开发,这种编程风格可以消除因取消和关闭而产生的常见风险(例如线程泄漏和取消延迟),并提高并发代码的可观察性。

范围值(第二预览)- JEP 464:

实现线程内和线程间不可变数据的高效共享。

价值:

  • 易于使用 - 提供一个编程模型来在线程内以及与子线程共享数据,以简化有关数据流的推理。
  • 可理解性——使共享数据的生命周期从代码的语法结构中可见。
  • 鲁棒性——确保调用者共享的数据只能由合法的被调用者检索。
  • 性能——将共享数据视为不可变,以允许大量线程共享,并实现运行时优化。

Vector API(7 个孵化器)- JEP 460:

用于表达向量计算的 API,可在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。

此 JEP 建议在 JDK 22 中重新孵化 API,并相对于 JDK 21 对 API 进行细微增强。该实现包括错误修复和性能增强。我们包括以下显着变化:

  • 支持使用任何原始元素类型的数组支持的堆 MemorySegments 进行向量访问。以前的访问仅限于由字节数组支持的堆 MemorySegment。

价值:

  • 提供清晰简洁的 API,能够清晰简洁地表达各种向量计算,这些向量计算由循环内组成的向量运算序列组成,并且可能还包含控制流。
  • 该 API 设计为与 CPU 架构无关,可在支持向量指令的多种架构上实现。
  • 在 x64 和 AArch64 架构上提供可靠的运行时编译和性能。
  • 与瓦尔哈拉计划保持一致。

3)性能

G1 的区域固定- JEP 423:

通过在 G1 中实现区域固定来减少延迟,以便在 Java 本机接口 (JNI) 关键区域期间无需禁用垃圾收集。

价值:

使用 JNI 时,Java 线程无需在 G1 GC 操作完成之前等待,从而提高开发人员的工作效率。

4) 工装

启动多文件源代码程序- JEP 458:

允许用户运行作为多个 Java 源代码文件提供的程序,而无需先进行编译。

价值:

  • 通过使从小程序到大型程序的过渡更加渐进,提高开发人员的工作效率,使开发人员能够选择是否以及何时配置构建工具。

请注意,预览功能已完全指定并完全实现了 Java SE 平台的语言或 VM 功能,但它们是暂时的。它们在 JDK 功能版本中提供,以便开发人员根据实际使用情况提供反馈,然后再在未来版本中永久保留。这也为工具供应商提供了在最终确定为 Java SE 标准之前致力于支持功能的机会。

孵化器模块中的 API将非最终 API 和非最终工具交给开发人员和用户,以收集反馈,最终提高 Java 平台的质量。

除了 JEP 中描述的更改之外,发行说明中还列出了许多较小的更新,许多应用程序开发人员和系统管理员都会对此感兴趣。其中包括弃用过时的 API 和删除以前弃用的 API。

Java 22 发行说明中的​​一些关键更新:

  • 向 keytool 和 jarsigner 添加附加算法。
  • 垃圾收集器吞吐量的提高,尤其是与“年轻”垃圾相关的情况。
  • 更好的系统模块描述符版本报告。
  • 改进了本机代码的“等待”处理选项。
  • Unicode 通用区域设置数据存储库已更新至版本 44。
  • 类型注释支持从字节码加载的类型。
  • ForkJoinPool 和 ForJoinTasks 现在可以更好地处理不间断任务。
  • 配置客户端与服务器 TLS 连接属性的额外灵活性。
  • 改进了本机内存跟踪,包括报告峰值使用情况的能力。

最后,与所有功能版本一样,JDK 22 包括数百个性能、稳定性和安全更新,包括适应底层操作系统和固件更新和标准。用户和应用程序开发人员通常会在没有注意到的情况下从这些更改中受益。

所有 JDK 版本中都包含不变的功能:可预测性

JDK 22 是通过六个月的发布节奏按时交付的第 13 个功能版本由于预期改进源源不断,这种程度的可预测性使开发人员能够轻松管理创新的采用。

Java 提高性能、稳定性和安全性的能力使其继续成为世界上最流行的编程语言。

Oracle 将不会为 JDK 22 提供长期支持;我们将在 2024 年 9 月之前提供更新,届时它将被 Oracle JDK 23 取代。

Java 22,一起

与之前的版本一样,Java 22 庆祝了 OpenJDK 社区中许多个人和组织的贡献 - 我们一起构建 Java!

JDK 22 修复率

JDK 版本随时间的变化率多年来基本保持不变,但在六个月的节奏下,生产就绪的功能和改进的交付速度急剧加快。

我们不像过去的主要版本那样每隔几年进行数以万计的修复并提供近百个 JEP(JDK 增强提案),而是按照更易于管理和可预测的六个月计划在更精简的功能版本中提供增强功能。这些变化范围从重要的新功能到日常维护、错误修复和文档改进的小增强。每个更改都在JDK Bug 系统中的单个问题的单个提交中表示。

在 GA 时,Java 11 到 Java 22 中标记为已修复的26,447 个JIRA 问题中,有 18,842 个是由 Oracle 员工完成的,而 7,605 个是由个人开发人员和为其他组织工作的开发人员贡献的。仔细研究这些问题并整理受让人的组织数据,可以得出以下赞助 Java 贡献开发的组织图表:

在 Java 22 中,在标记为已修复的 2,251 个 JIRA 问题中,有1,554 个 由 Oracle 完成,而697 个由 Java 社区的其他成员贡献。

Oracle 衷心感谢亚马逊、ARM、谷歌、华为、IBM、英特尔、ISCAS、微软、红帽、Rivos、SAP 和腾讯等组织的开发人员做出的显着贡献。我们还很高兴看到 Bellsoft Data Dog 和 Loongson 等小型组织以及独立开发人员的贡献,他们总共贡献了 Java 22 中 7% 的修复。

此外,通过OpenJDK 质量外展计划,我们要感谢以下 FOSS 项目,它们在测试 Java 22 早期访问版本方面提供了出色的反馈,以帮助提高发布的质量:

  • 阿帕奇晕厥 (Francesco Chicchiriccò)
  • Apache Tomcat(马克·托马斯)
  • ApprovalTests.Java (Lars Eckart)
  • AssertJ(斯特凡诺·科迪奥)
  • 阿瓦耶(乔赛亚·诺尔 饰)
  • 码头(西蒙娜·博代 饰)
  • MyBatis(岩尾大道)
  • 并行收集器 (Grzegorz Piwowarek)
  • RxJava(大卫·卡诺克)

资源

Java 仍然是当今技术趋势的第一大编程语言。 Java 22 的按时交付改进表明,通过持续深思熟虑的规划和生态系统参与,Java 平台已为云中的现代开发和增长做好了准备。

通过以下方式继续了解最新新闻和更新:

  • 访问 Dev.java(Oracle 的专用门户,旨在提高您的 Java 知识和社区参与度)。
  • 访问 Inside.java (Oracle Java 团队的新闻和观点)。
  • 收听Inside.java 播客(由 Oracle 的 Java 开发人员直接为您提供的面向 Java 开发人员的音频节目。对话将讨论该语言、JVM、OpenJDK、平台安全性、Loom 和 Panan 等创新项目以及一切之间)。
  • 观看 Inside.java 新闻广播(将 Inside.java 播客扩展为视频格式的视频节目)。
  • 在 YouTube 上观看Java (Oracle 的相关 Java 视频集合,可帮助您提高 Java 专业知识)。
  • 观看JEP Café (Oracle 对流行的 JDK 增强提案的技术探索)。
  • 观看Sip of Java(Oracle 的 1 分钟简短视频,介绍了鲜为人知的 Java 增强功能,这些增强功能可提供性能、稳定性和安全性改进)。
  • 加入OpenJDK 邮件列表(了解您最喜欢的 OpenJDK 项目进展的地方)。
  • 关注OpenJDKJava on X(社交媒体,提供有关 Java 不断发展的更新和新闻)。
  • 订阅Inside Java Newsletter(一份月刊,总结了 Oracle 的许多关键 Java 技术和社区更新)。

萨拉特·钱德

Java SE 产品管理总监

Sharat Chander 在 IT 行业工作了 20 年,曾就职于 Bell Atlantic、Verizon、Sun Microsystems 和 Oracle 等公司。他的背景和技术专长是 Java 开发工具、图形设计和产品/社区管理。 Chander 15 年来一直积极参与 Java 社区,帮助提高 Java 意识、接受度、采用和宣传。在 Oracle,作为 Java 开发人员关系总监,Chander 担任 JavaOne 会议内容主席,他担任该职位已有 7 年,负责推动会议中的技术内容策略和 Java 社区参与。他经常担任全球开发者计划的主题演讲者和参与者。 Chander 拥有马里兰大学企业金融学士学位和马里兰州洛约拉学院国际商务 MBA 学位。您可以在多个全球开发者活动和 Java 社区活动中找到 Chander。当爪哇的知名度不高时,他会追随他对棒球的其他热情,并狂热地追随他的家乡巴尔的摩金莺队。

推特账号:@Sharat_Chander

显示较少

上一篇文章

在 Apple Silicon 系统上运行 macOS 14 的 Java 用户应跳过 macOS 14.4 并直接更新到 macOS 14.4.1

下一篇文章


宣布推出适用于 JDK 22 的 Oracle GraalVM

肖恩·史密斯| 2分钟阅读